iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

apply函數是一系列的,有些情況下可以用來取代for迴圈,做循環的動作,由於apply家族較為龐大,本篇只會介紹在資料分析中常用的幾種。

  • apply(): 第一種最基本的函數,也是最常見的,可以在matrix, dataframe等資料形態中使用,下方就來舉一個例子。
    • 函數定義: apply(X, MARGIN, FUN, ..., simplify = TRUE),其中MARGIN表示要以行(填1)或列(填2)作計算標準,FUN代表要運算的函數,也可以自己定義
    • 舉例情境:期末時間到了,老師想針對班上三名學生的小考分數計算總分,來看誰的分數最高,同時也計算每次小考三人的平均分數,找出是否有哪次的考卷比較難
# 小考分數
day9 = data.frame(
                  May_score = c(80, 93, 99, 69, 80),
                  Ann_score = c(85, 82, 95, 67, 70),
                  Jay_score = c(90, 78, 92, 62, 50)
                )
# 原始資料呈現
day9
  May_score Ann_score Jay_score
1        80        85        90
2        93        82        78
3        99        95        92
4        69        67        62
5        80        70        50

# 計算個人分數總合
apply(day9, 2, sum)
May_score Ann_score Jay_score 
      421       399       372 

# 計算每次小考三人的平均分數
apply(day9,1,mean)
[1] 85.00000 84.33333 95.33333 66.00000 66.66667
  • lapply(): 可以在vector, list, dataframe等資料型態中使用,回傳的結果會是list且資料長度與輸入的資料相同
    • 函數定義: lapply(X, FUN, ...)
    • 舉例情境:沿用上述相同資料,把資料型態改成list
day9 = list(  
            May_score = c(80, 93, 99, 69, 80),
            Ann_score = c(85, 82, 95, 67, 70),
            Jay_score = c(90, 78, 92, 62, 50)
            )

# 原始資料呈現
day9
$May_score
[1] 80 93 99 69 80

$Ann_score
[1] 85 82 95 67 70

$Jay_score
[1] 90 78 92 62 50

# 計算個人平均分數
lapply(day9, mean)
$May_score
[1] 84.2

$Ann_score
[1] 79.8

$Jay_score
[1] 74.4
  • sapply(): 可以在vector, list, dataframe等資料型態中使用,用法和lapply()相似,但是回傳的結果會是array型態,資料長度也與輸入的資料相同
    • 函數定義: sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE),simplify = TRUE表示正常情況下會回傳arraymatrix
    • 舉例情境:一樣沿用上述list型態的資料,可以看到回傳結果為array
sapply(day9, mean)
May_score Ann_score Jay_score 
     84.2      79.8      74.4 

apply函數系列其實還有很多,有興趣的人可再研究,這邊的介紹就告一段落了。
下一篇會開始介紹與dataframe處理有關的package


上一篇
[Day 8] R語言文字處理
下一篇
[Day 10] R語言melt()與dcast()函數使用
系列文
30天成為資料分析師-手把手R語言與資料分析教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言